import { reqGetDetailList,reqAddOrUpdateShopCart } from '@/api';
const state = {
     //仓库中的detailList有几种状态:
     //第一种状态：起始数据是一个空对象
     //第二种状态：派发action，向服务器发请求，服务器把数据返回给你【真实的数据】，将空对象替换
     detailList:{}
};
const mutations = {
    GETDETAILLIST: (state, detailList) => {
         state.detailList = detailList;
    }
}
const actions = {
    //获取详情的数据
    async getDetailList({ commit }, skuId) {
        let result = await reqGetDetailList(skuId);
        if (result.code == 200) {
            commit("GETDETAILLIST", result.data);
        }
    },
    // 加入购物车 || 更新购物车某个商品的请求
    async addShopCart({commit},{skuId,skuNum}){
        // 上面需要注意:第一个占位的是minStore对象  
        // 然后才是后面的参数  如果只有参数  返回的是undefinded
        // 问题:上面返回的数据中没有数据 为什么是null?
        // 返回的是一个axios实例  是一个Promise   默认返回undefined undefined代表就是成功状态
        // 非空字符串返回的结果都为成功
        let result = await reqAddOrUpdateShopCart(skuId,skuNum);
        if(result.code==200){
            return 'ok'; // 代表返回的数据就是成功
        }else{
            return Promise.reject(new Error('faile')) // 代表返回的数据就是失败状态
        }
    }
};
//getters:计算属性。在项目当中为简化数据而生
const getters = {
    //面包屑的数据
    //state:计算属性getters里面的state，是当前仓库中state，并非大仓库中数据【home、search】
    categoryView(state){
       //计算属性注意:
       //情况1:detailList是一个空对象，空对象打点categoryView等于undefined，你把undefined给组件
       //情况2:当服务器的数据返回，detailList属性的属性值发生变化，重新计算（detailList）存储即为服务器的数据，
       //给组件给的也是服务器的数据
       return state.detailList.categoryView||{}
    },
    // 产品属性的简化代码
    spuSaleAttrList(state){
         return state.detailList.spuSaleAttrList;
    },
    // 产品详情的简化
    skuInfo(state){
        return state.detailList.skuInfo || {};
    }

};
export default {
    state,
    mutations,
    actions,
    getters
}